package com.hu.system.service;

import java.util.List;

import com.hu.system.domain.ProductInfo;

/**
 * 产品信息Service接口
 *
 * @author hu
 * @date 2025-01-21
 */
public interface IProductInfoService {
    /**
     * 查询产品信息列表
     *
     * @param productInfo 产品信息
     * @return 产品信息集合
     */
    public List<ProductInfo> selectProductInfoList(ProductInfo productInfo);

    /**
     * 查询产品信息
     *
     * @param productId 产品信息主键
     * @return 产品信息
     */
    public ProductInfo selectProductInfoByProductId(Long productId);

    /**
     * 校验SKU编码是否唯一
     *
     * @param sku       SKU编码
     * @param productId 产品ID（编辑时传入，新增时为null）
     * @return 结果 true唯一 false不唯一
     */
    public boolean checkSkuUnique(String sku, Long productId);

    /**
     * 新增产品信息
     *
     * @param productInfo 产品信息
     * @return 结果
     */
    public int insertProductInfo(ProductInfo productInfo);

    /**
     * 修改产品信息
     *
     * @param productInfo 产品信息
     * @return 结果
     */
    public int updateProductInfo(ProductInfo productInfo);

    /**
     * 批量删除产品信息
     *
     * @param productIds 需要删除的产品信息主键集合
     * @return 结果
     */
    public int deleteProductInfoByProductIds(Long[] productIds);

    /**
     * 根据SKU查询产品信息
     *
     * @param sku SKU编码
     * @return 产品信息
     */
    public ProductInfo selectProductInfoBySku(String sku);

    /**
     * 根据SKU和店铺ID查询产品信息
     *
     * @param sku SKU编码
     * @param shopId 店铺ID
     * @return 产品信息对象
     */
    public ProductInfo selectProductInfoBySkuAndShopId(String sku, Long shopId);

    /**
     * 导入时自动创建或更新产品（默认更新已存在的产品）
     *
     * @param sku           SKU编码
     * @param productName   产品名称
     * @param skuAttr       SKU属性
     * @param skuCode       SKU货号（如果为空则使用sku作为默认值）
     * @param shopId        所属店铺ID
     * @return 产品操作结果（包含产品信息和操作类型）
     */
    public com.hu.system.domain.ProductOperationResult getOrCreateProduct(String sku, String productName, String skuAttr, String skuCode, Long shopId);

    /**
     * 批量修改产品状态
     *
     * @param productIds     产品ID数组
     * @param productStatus  产品状态
     * @return 结果
     */
    public int updateProductStatus(Long[] productIds, String productStatus);
}

